#!/bin/bash
# *****************************************************************
# * 功能: Flask 项目自动化部署脚本
# * 作者: 王树森
# * 联系: wangshusen@sswang.com
# * 版本: 2025-06-09
# * 使用方法: ./deploy_flask_project.sh [项目路径] [虚拟环境路径]
# ******************************************************************


# 设置颜色输出
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
NC='\033[0m' # 无颜色

# 默认路径
PROJECT_PATH=${1:-"/data/server/project"}
VENV_PATH=${2:-"/data/server/myenv"}

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查是否有 root 权限
if [ "$(id -u)" != "0" ]; then
    log_error "此脚本需要 root 权限运行"
    exit 1
fi

# 创建项目目录
create_project_structure() {
    log_info "创建项目目录结构..."
    mkdir -p "$PROJECT_PATH"
    mkdir -p "$PROJECT_PATH/templates"
    log_info "项目目录创建完成: $PROJECT_PATH"
}

# 安装系统依赖
install_system_dependencies() {
    log_info "安装系统依赖..."
    apt update
    apt install -y python3-pip python3-venv pkg-config default-libmysqlclient-dev build-essential
    log_info "系统依赖安装完成"
}

# 创建虚拟环境
create_virtualenv() {
    log_info "创建 Python 虚拟环境..."
    python3 -m venv "$VENV_PATH"
    source "$VENV_PATH/bin/activate"
    
    # 设置 pip 镜像源
	pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
    pip config set global.extra-index-url https://pypi.tuna.tsinghua.edu.cn/simple
    pip config set install.trusted-host "mirrors.aliyun.com pypi.tuna.tsinghua.edu.cn"
    log_info "虚拟环境创建完成: $VENV_PATH"
    log_info "Python 版本: $(python --version)"
    log_info "Pip 版本: $(pip --version)"
}

# 安装 Python 依赖
install_python_dependencies() {
    log_info "安装 Python 依赖..."
    pip install --upgrade pip
    pip install flask flask-mysqldb mysql-connector-python pymysql flask-sqlalchemy gunicorn
    
    log_info "Python 依赖安装完成"
    log_info "已安装的包:"
    pip list
}

# 定制 系统服务
deploy_flask_service(){
    cp -a project/* ${PROJECT_PATH}/
    cp -a services/flask-gunicorn.service /etc/systemd/system/
    mkdir -p /var/log/gunicorn
    systemctl daemon-reload
    systemctl restart flask-gunicorn
}

# 主函数
main() {
    log_info "开始部署 Flask 项目..."
    
    create_project_structure
    install_system_dependencies
    create_virtualenv
    install_python_dependencies
    deploy_flask_service

    log_info "项目部署完成！"
    log_info "项目路径: $PROJECT_PATH"
    log_info "虚拟环境路径: $VENV_PATH"
    log_info "使用以下命令激活虚拟环境:"
    log_info "source $VENV_PATH/bin/activate"
}

# 执行主函数
main
